Godot: Input Event
ユーザからどのような入力が行われたのかを管理する
簡単な例: ESCキーが入力されたら、ゲームを終了する
code:gd
func _unhandled_input(event):
if event is InputEventKey:
if event.pressed and event.keycode == KEY_ESCAPE:
get_tree().quit()
コード変更なしで、Project Settings のみ変更可能
runtime で変更可能なので、ゲーム内の Key config 機能に使える
code:gd
func _process(delta):
if Input.is_action_pressed("ui_right"):
# Move right.
どのように動いているか
https://gyazo.com/34186c14c26ab83ebaff38f41978ab71
1. Windows Viewport でイベントを処理
2. まず、_input() 関数で処理。ここは GUI処理の前となる
3. _gui_input()関数で処理
4. _shortcut_input()関数で処理
5. _unhandled_input()関数で処理
6. _unhandlede_key_input()関数で処理
7. 各種オブジェクトで処理
Camera3Dや、CollisitionObject3D._input_event()など
input の処理順番は、以下の深さ優先の順序となる
https://gyazo.com/0d24678289c678926ac2746bf0b947af
ただし、この順序は、Control._gui_input() には適用されないとのこと
InputEvent の種類
InputEvent
Empty Input Event.
InputEventKey
Contains a keycode and Unicode value, as well as modifiers.
InputEventMouseButton
Contains click information, such as button, modifiers, etc.
InputEventMouseMotion
Contains motion information, such as relative, absolute positions and speed.
InputEventJoypadMotion
Contains Joystick/Joypad analog axis information.
InputEventJoypadButton
Contains Joystick/Joypad button information.
InputEventScreenTouch
Contains multi-touch press/release information. (only available on mobile devices)
InputEventScreenDrag
Contains multi-touch drag information. (only available on mobile devices)
InputEventAction
Contains a generic action. These events are often generated by the programmer as feedback. (more on this below)
InputEventAction について詳しく
0以上の InputEvents を便宜的に1つに抽象化したもの
例えば、build-in の ui_left など
同じコードで、異なるデバイスの input に対応できる
run-time 中に reconfig できる
Project Settings の InputMap タブで編集できる
https://gyazo.com/31de31d66da213c0b09b217e4f335526
どの envets も、以下のメソッドを持っている
InputEvent.is_action()
InputEvent.is_pressed()